package com.yztstudy.Controller;

import com.yztstudy.Service.CartService;
import com.yztstudy.entity.Cart;
import com.yztstudy.param.CartListParam;
import com.yztstudy.param.CartSaveParam;
import com.yztstudy.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 购物车的表示层
 */

@RestController
@RequestMapping("/cart")
public class CartController {

    @Autowired
    private CartService cartService;


    /**
     * TODO 添加购物车
     * @param cartSaveParam 前端传过来的参数
     * @param result 校验结果
     * @return
     */
    @PostMapping("/save")
    public R save(@RequestBody @Validated CartSaveParam cartSaveParam, BindingResult result)
    {
        // TODO 1.如果校验失败
        if (result.hasErrors())
        {
            return R.fail("参数有误,数据查询失败!");
        }

        // TODO 2.如果校验成功,就交给业务逻辑层处理
        return cartService.save(cartSaveParam);
    }


    /**
     * TODO 查看购物车
     * @param cartListParam 前端传过来的用户ID
     * @param result 校验后的结果
     * @return
     */
    @PostMapping("/list")
    public R list(@RequestBody @Validated CartListParam cartListParam, BindingResult result)
    {
        // TODO 1.如果校验失败
        if (result.hasErrors())
        {
            return R.fail("参数有误,数据查询失败!");
        }

        // TODO 2.如果校验成功,就交给业务逻辑层处理
        return cartService.list(cartListParam);
    }


    /**
     * TODO 更新购物车中的数据
     * @param cart 购物车
     * @return
     */
    @PostMapping("/update")
    public R update(@RequestBody Cart cart)
    {
        return cartService.update(cart);
    }


    /**
     * TODO 删除购物车中的数据
     * @param cart 购物车
     * @return
     */
    @PostMapping("/remove")
    public R remove(@RequestBody Cart cart)
    {
        return cartService.remove(cart);
    }


    /**
     * TODO 检查购物车中是否有要删除的商品
     * @param productId 商品的Id
     * @return
     */
    @PostMapping("/check")
    public R check(@RequestBody Integer productId)
    {
        return cartService.check(productId);
    }
}
